package geon.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import geon.model.Contador;
import geon.utils.DataUtils;

public class DaoContador {
	
	private DaoContador contador;
	private DaoGenerico dao;
	private String sql;
	
	private DaoContador() {
		dao = new DaoGenerico();
	}
	
	public DaoContador getInstance() {
		if (contador == null) {
			contador = new DaoContador();
		}
		return contador;
	}

	public Integer add(Contador o) throws SQLException {
		try {
			dao.begin();
			sql = "Insert Into TbContador (ConCodigo, ConValor) Values (?, ?)";
			o.setCodigo(Integer.parseInt(DataUtils.dataFormat("yyyyMM")));
			o.setValor(1);
			dao.executeCommand(sql, o.getCodigo(), o.getValor());
			dao.commit();
		} catch (Exception e) {
			dao.rollback();
		}
		return o.getCodigo() * 10000;
	}

	public void inc(int codigo) throws SQLException {
		try {
			dao.begin();
			sql = "Update TbContador Set ConValor = ConValor +1 Where ConCodigo = ?";
			dao.executeCommand(sql, codigo);
			dao.commit();
		} catch (Exception e) {
			dao.rollback();
		}
	}
	
	public Integer inc(String tabela, String chave) throws SQLException {
		Object contador = null;
		sql = "Select Max(" + chave + ") as Id From " + tabela;
		ResultSet rs = dao.executeQuery(sql);
		if (rs.next()) {
			contador = rs.getObject(1);
		}
		rs.close();
		if (contador == null) {
			return 1;
		} else {
			return ((Integer) contador) +1;
		}
	}

	public Contador set(ResultSet rs) throws SQLException {
		Contador contador = new Contador();
		contador.setCodigo(rs.getInt("ConCodigo"));
		contador.setValor(rs.getInt("ConValor"));
		return contador;
	}

	public Contador get() throws SQLException {
		Contador contador = null;
		sql = "Select ConCodigo, ConValor From TbContador Where ConCodigo In (Select Max(ConCodigo) From TbContador)";
		ResultSet rs = dao.executeQuery(sql);
		if (rs.next()) {
			contador = set(rs);
		}
		rs.close();
		return contador;
	}
	
	public Integer pes() throws SQLException {
		Integer resultado = null;
		sql = "Select Max(PesCodigo) as Codigo From TbPessoa";
		ResultSet rs = dao.executeQuery(sql);
		if (rs.next()) {
			resultado = (Integer) rs.getObject(1) +1;
		}
		rs.close();
		return resultado;
	}

}
